package org.gruposp2p.openid.provider

import org.apache.commons.lang.builder.HashCodeBuilder

class UserDNIRoleDNI implements Serializable {

	UserDNI userDNI
	RoleDNI roleDNI

	boolean equals(other) {
		if (!(other instanceof UserDNIRoleDNI)) {
			return false
		}

		other.userDNI?.id == userDNI?.id &&
			other.roleDNI?.id == roleDNI?.id
	}

	int hashCode() {
		def builder = new HashCodeBuilder()
		if (userDNI) builder.append(userDNI.id)
		if (roleDNI) builder.append(roleDNI.id)
		builder.toHashCode()
	}

	static UserDNIRoleDNI get(long userDNIId, long roleDNIId) {
		find 'from UserDNIRoleDNI where userDNI.id=:userDNIId and roleDNI.id=:roleDNIId',
			[userDNIId: userDNIId, roleDNIId: roleDNIId]
	}

	static UserDNIRoleDNI create(UserDNI userDNI, RoleDNI roleDNI, boolean flush = false) {
		new UserDNIRoleDNI(userDNI: userDNI, roleDNI: roleDNI).save(flush: flush, insert: true)
	}

	static boolean remove(UserDNI userDNI, RoleDNI roleDNI, boolean flush = false) {
		UserDNIRoleDNI instance = UserDNIRoleDNI.findByUserDNIAndRoleDNI(userDNI, roleDNI)
		instance ? instance.delete(flush: flush) : false
	}

	static void removeAll(UserDNI userDNI) {
		executeUpdate 'DELETE FROM UserDNIRoleDNI WHERE userDNI=:userDNI', [userDNI: userDNI]
	}

	static void removeAll(RoleDNI roleDNI) {
		executeUpdate 'DELETE FROM UserDNIRoleDNI WHERE roleDNI=:roleDNI', [roleDNI: roleDNI]
	}

	static mapping = {
		id composite: ['roleDNI', 'userDNI']
		version false
	}
}
